/*
 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.invoke;

import java.lang.annotation.*;

/**
 * 如果字段的所有组件变量最多只改变一次值，则该字段可以被注解为稳定的。
 * 字段的值算作其组件值。
 * 如果字段的类型是数组，那么数组的所有非空组件，
 * 深度达到字段数组类型的等级，也算作组件值。
 * 推而广之，任何被注解为稳定的变量（数组或字段）
 * 称为稳定变量，其非空或非零值称为稳定值。
 * <p>
 * 由于所有字段都以引用的默认值 null（对于基本类型则为零）开始，
 * 因此这个注解表示存储在字段中的第一个非空（对于基本类型则为非零）值
 * 永远不会被改变。
 * <p>
 * 如果字段不是数组类型，没有数组元素，
 * 那么被指示为稳定的值就是字段的值。
 * 如果字段值的动态类型是数组但静态类型不是，
 * 数组的组件<em>不</em>被视为稳定的。
 * <p>
 * 如果字段是数组类型，那么字段值和字段值的所有组件
 * （如果字段值非空）都被指示为稳定的。
 * 如果字段类型是等级为 {@code N > 1} 的数组类型，
 * 那么字段值的每个组件（如果字段值非空）
 * 被视为等级为 {@code N-1} 的稳定数组。
 * <p>
 * 声明为 {@code final} 的字段也可以被注解为稳定的。
 * 由于 final 字段已经表现为稳定值，这样的注解
 * 不表示额外的信息，除非字段的类型是数组类型。
 * <p>
 * 如果被注解为稳定的字段被赋予第三个值会发生什么，
 * 目前是未定义的。实际上，如果 JVM 依赖此注解
 * 将字段引用提升为常量，可能会出现 Java 内存模型
 * 看起来被破坏的情况，如果这样的常量（字段的第二个值）
 * 在字段值已经改变后仍被用作字段的值。
 */
/* package-private */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Stable {
}
